/**
 * @author 侯非
 * @date 2009年3月12日
 * @class AddMoneyStandardPanel
 * @extends Ext.Panel
 * @description 薪酬标准管理
 */
AddMoneyStandardPanel = Ext.extend(Ext.Panel, {
			myid : "myid",
			myEidGrid : null,
			myForm : null,
			// 构造方法
			constructor : function(_config) {
				if (_config == null) {
					_config = {};
				}
				Ext.apply(this, _config);
				this.myEidGrid = new AddMoneyStandardEditGrid();
				this.myForm = new AddMoneyStandardFormPanel();
				AddMoneyStandardPanel.superclass.constructor.call(this, {
							id : this.myid, // 唯一id
							border : false, // 不要边框
							bodyStyle : "backgroundColor:#DFE8F6;",
							autoScroll : true,
							items : [{
										frame : true,
										xtype : "panel",
										items : [{
													xtype : "fieldset",
													title : "薪酬信息",
													autoWidth : true,
													autoHeight : true,
													items : [this.myForm]
												}, {
													xtype : "fieldset",
													title : "薪酬项目金额设置",
													autoWidth : true,
													autoHeight : true,
													items : [this.myEidGrid]
												}]
									}]
						});

				// 监听myEidGrid的onMyConfigItemMoney自定义事件
				this.myEidGrid.on("onMyConfigItemMoney", this.onCalcTotalMoney,
						this);
				// 监听myForm的onMyMakeStandard自定义事件
				this.myForm.on("onMyMakeStandard", this.onMyMakeStandard, this);
				// 监听myForm的onMyCancelMakeStandard自定义事件
				this.myForm.on("onMyCancelMakeStandard",
						this.onCancelMakeStandard, this)
			},

			/**
			 * 计算薪酬总金额并将总金额设置到form中
			 */
			onCalcTotalMoney : function() {
				// 获取表格的数据存储器
				var _store = this.myEidGrid.getStore();
				// 提交修改的数值
				_store.commitChanges();
				// 总金额
				var _totalMoney = 0.00;
				// 计算总金额
				for (var i = 0; i < _store.getCount(); i++) {
					_totalMoney += _store.getAt(i).get("moneyValue");
				}
				var _text = this.myForm.findByType("numberfield");
				// 将总金额设置到form中
				_text[0].setValue(_totalMoney);
			},

			/**
			 * myForm的取消制订标准事件
			 */
			onCancelMakeStandard : function() {
				this.myEidGrid.getStore().reload();
				this.myForm.getForm().reset();
			},

			/**
			 * 获取当前表格的薪酬项目所有金额json数据
			 * 
			 * @return {} json
			 */
			getMoneyItemsValue : function() {
				var _st = this.myEidGrid.getStore();
				var moneyItems = "[";
				for (var i = 0; i < _st.getCount(); i++) {
					if (i + 1 == _st.getCount()) {
						moneyItems += Ext.util.JSON.encode(_st.getAt(i).data);
					} else {
						moneyItems += Ext.util.JSON.encode(_st.getAt(i).data)
								+ ",";
					}
				}
				moneyItems += "]";
				return moneyItems;
			},

			/**
			 * 获取当前表单薪酬信息的所有json数据
			 * 
			 * @return {}
			 */
			getMoneyInfoValues : function() {
				var _smoneyInfo = this.myForm.getForm().getValues();
				var _moneyInfo = Ext.util.JSON.encode(_smoneyInfo);
				return _moneyInfo;
			},

			/**
			 * 提交成功回调函数
			 * 
			 * @param {}
			 *            _res
			 */
			makeStandardSuccess : function(_res) {
				Ext.MessageBox.show({
							msg : "数据传输中,请稍候...",
							progressText : '制定中...',
							title : "数据传输",
							width : 300,
							waitConfig : {
								// 间隔(毫秒)
								interval : 50
							},
							wait : true
						});

				var _myForm = this.myForm;
				var _mygrid = this.myEidGrid;
				// 延时500毫秒
				setTimeout(function() {
							Ext.MessageBox.hide();
							// 获取服务端的返回值
							var _resText = _res.responseText;
							if (_resText == 1) {
								Ext.MessageBox.alert("系统消息", "该薪酬编号已存在,请重新输入!");
							} else if (_resText == 2) {
								Ext.MessageBox.alert("系统消息",
										"制定失败,请重新制定或与管理员联系!");
							} else if (_resText == 3) {
								Ext.MessageBox
										.alert("系统消息", "您已经成功的制订了一个薪酬标准!");
								_myForm.getForm().reset();
								_mygrid.getStore().reload();
							}
						}, 500);
			},

			/**
			 * myForm的确认制定按钮单击事件
			 */
			onMyMakeStandard : function() {
				// 获取表格的数据存储器未提交的记录的个数
				var _gsml = this.myEidGrid.getStore().modified.length;
				// 如果表格已经修改的数据已提交
				if (_gsml == 0) {
					// 如果表单验证通过
					if (this.myForm.getForm().isValid() == true) {
						// 获取当前表格的薪酬项目所有金额json数据
						var _moneyItems = this.getMoneyItemsValue();
						// 获取当前表单薪酬信息的所有json数据
						var _moneyInfo = this.getMoneyInfoValues();
						// 对服务端进行Ajax请求
						Ext.Ajax.request({
									url : "moneyStandard.do", // url
									method : "post", // post提交方式
									success : this.makeStandardSuccess,
									scope : this,
									params : { // 参数列表
										operator : "makeStandard",
										moneyItems : _moneyItems,
										moneyInfo : _moneyInfo
									}
								});
					}
				} else {
					Ext.Msg.alert("系统消息", "您尚未确认提交设置项目金额");
				}
			}
		})